【WPF】提高InkAnalyer手写汉字识别的准确率

您所在的位置:网站首页 三星galaxy book 2手写汉字不识别 【WPF】提高InkAnalyer手写汉字识别的准确率

【WPF】提高InkAnalyer手写汉字识别的准确率

2024-07-12 12:48| 来源: 网络整理| 查看: 265

最近项目中需要用到一个手写键盘,我们使用了WPF的InkCanvas+InkAnalyer来开发。

按照文档,一般的代码写法如下:

var analyzer = new InkAnalyzer(); analyzer.AddStrokes(strokes, Constants.ChsLanguageId); analyzer.SetStrokesType(strokes, StrokeType.Writing); var status = analyzer.Analyze(); if (status.Successful) { return analyzer.GetAlternates() .OfType() .Select(x => x.RecognizedString) .ToArray(); } analyzer.Dispose();

不过,在实际跑起来之后,却发现识别精确度很低,经常会把一个字识别成好几个字,如果写的稍微远一点,则错误更多。

                              一个简单的人字会被识别成两个笔画

                             一个稍微写的开点的游字识别成了三个字

这让我们非常苦恼,在网上查阅资料也没有相关的方案。

经过我们仔细尝试后发现,如果我们把一个字连起来写一气呵成,识别率倒是上去了不少:

但是,我们不可能要求用户所有字都一气呵成吧?

就在这时,我们想到,既然不能要求用户把字一气呵成的写完,能不能通过程序让用户写的笔画“一气呵成”呢?

有了这个灵感,简单改动,将代码改成如下的写法:

/// /// 识别 /// /// 笔迹集合 /// 候选词数组 public string[] Recognize(StrokeCollection strokes) { if (strokes == null || strokes.Count == 0) return Constants.EmptyAlternates; var stroke = GetCombinedStore(strokes); var analyzer = new InkAnalyzer(); analyzer.AddStroke(stroke, Constants.ChsLanguageId); analyzer.SetStrokeType(stroke, StrokeType.Writing); var status = analyzer.Analyze(); if (status.Successful) { return analyzer.GetAlternates() .OfType() .Select(x => x.RecognizedString) .ToArray(); } analyzer.Dispose(); return Constants.EmptyAlternates; } private static Stroke GetCombinedStore(StrokeCollection strokes) { var points = new StylusPointCollection(); foreach (var stroke in strokes) { points.Add(stroke.StylusPoints); } return new Stroke(points); }

注意,在这种写法里面,我们并不直接使用InkCanvas给出的StrokeCollection,而是重新创建了一个Stroke,这个Stroke的StylusPoints是把所有Stroke的StylusPoints都添加进去了,多个Stroke变成了一个Stroke,这下我们再试试:

终于达到我们的要求了,呵呵

希望能给大家带来帮助

【附】如何启用手写识别:

1、在控制面板中选择 程序和功能->添加/删除Windows组件,选择TabletPC组件功能。

2、引用IACore.dll,IALoader.dll,IAWinFX.dll,Microsoft.Ink.Analysis.dll

3、App.config里面需要设置:

代码下载:https://files.cnblogs.com/RMay/WpfRecognize.7z



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3